package cn.tedu.tmall.admin.content.service.impl;

import cn.tedu.tmall.admin.content.dao.persist.repository.ICategoryRepository;
import cn.tedu.tmall.admin.content.pojo.entity.Category;
import cn.tedu.tmall.admin.content.pojo.param.CategoryAddNewParam;
import cn.tedu.tmall.admin.content.pojo.vo.CategoryStandardVO;
import cn.tedu.tmall.admin.content.service.ICategoryService;
import cn.tedu.tmall.common.enumerator.ServiceCode;
import cn.tedu.tmall.common.ex.ServiceException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CategoryServiceImpl implements ICategoryService {
    // 自动装配Repository
    @Autowired
    private ICategoryRepository categoryRepository;
    // 先在Repository中补充“根据ID查询类别详情”的方法
    // 先在Repository中补充“根据类别名称统计类别的数量”的方法

    @Override
    public void addNew(CategoryAddNewParam categoryAddNewParam) {

        // 从参数中获取本次尝试新增的类别的名称
        String name = categoryAddNewParam.getName();
        // 调用Repository根据名称统计数量
        int countByName = categoryRepository.countByName(name);
        // 判断统计结果是否大于0
        if (countByName>0) {
            // 是：抛出异常
            throw new RuntimeException("类别名称已经被占用！");
        }

        // 创建实体（Category）对象
        Category category = new Category();
        // 将参数的各属性值复制到实体对象中
        BeanUtils.copyProperties(categoryAddNewParam,category);
        // 调用Repository执行插入数据（实体）
        categoryRepository.insert(category);
    }

    @Override
    public CategoryStandardVO getStandardById(Long id) {
        CategoryStandardVO queryResult = categoryRepository.getStandardById(id);
        if (queryResult == null) {
            String message = "获取类别详情失败，尝试访问的数据不存在！";
            throw new ServiceException(ServiceCode.ERROR_NOT_FOUND, message);
        }
        return queryResult;
    }
}
